package org.example.controller.sysManage;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.example.model.common.PageResponseDto;
import org.example.model.common.ResponseResult;
import org.example.model.user.dtos.LoginDto;
import org.example.model.user.dtos.UserInfoNoPwdDto;
import org.example.model.user.vos.AddUserInfoVo;
import org.example.model.user.vos.LoginVo;
import org.example.model.user.vos.SearchUserInfoVo;
import org.example.controller.common.permission.PermissionControl;
import org.example.service.user.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户信息表现层
 */
@CrossOrigin
@RestController
@RequestMapping("/user-info")
@Api(value = "用户接口", tags = {"用户信息接口"})
@PermissionControl(Parent = "系统配置", Name = "用户管理", Order = 2)
public class UserInfoController {

    @Autowired
    private UserInfoService userInfoService;

    /**
     * 添加一条用户信息
     * @param addUserInfoVo 要修改的用户信息
     */
    @PostMapping
    @ApiOperation("添加一条用户信息")
    @PermissionControl(Parent = "用户管理", Name = "添加", Order = 1)
    public ResponseResult<Boolean> AddUserInfo(@RequestBody AddUserInfoVo addUserInfoVo) {
        return userInfoService.InsertUserInfo(addUserInfoVo);
    }

    /**
     * 根据id修改一条用户信息
     * @param addUserInfoVo 要修改的用户信息
     */
    @PutMapping
    @ApiOperation("根据id修改一条用户信息")
    @PermissionControl(Parent = "用户管理", Name = "修改", Order = 3)
    public ResponseResult<Boolean> UpdateUserInfo(@RequestBody AddUserInfoVo addUserInfoVo) {
        return userInfoService.UpdateUserInfoById(addUserInfoVo);
    }

    /**
     * 根据id修改用户密码
     * @param addUserInfoVo 要修改的用户信息
     */
    @PutMapping("/password")
    @ApiOperation("根据id修改一条用户信息")
    @PermissionControl(Parent = "用户管理", Name = "修改密码", Order = 5)
    public ResponseResult<Boolean> UpdateUserPassword(@RequestBody AddUserInfoVo addUserInfoVo) {
        return userInfoService.UpdateUserInfoById(addUserInfoVo);
    }

    /**
     * 根据id删除一条用户信息
     * @param id 用户信息id
     */
    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除一条用户信息")
    @PermissionControl(Parent = "用户管理", Name = "删除", Order = 2)
    public ResponseResult<Boolean> DeleteUserInfo(@PathVariable int id) {
        return userInfoService.DeleteUserInfoById(id);
    }

    /**
     * 分页根据条件（用户名，手机号模糊查询，性别，部门，职位，状态精确查询）获取用户信息列表
     * @param searchUserInfoVo 查询条件
     */
    @GetMapping("/user-list")
    @ApiOperation("分页根据条件（用户名，手机号模糊查询，性别，部门，职位，状态精确查询）获取用户信息列表")
    @PermissionControl(Parent = "用户管理", Name = "查询", Order = 4)
    public ResponseResult<PageResponseDto<List<UserInfoNoPwdDto>>> GetUserInfoList(SearchUserInfoVo searchUserInfoVo) {
        return userInfoService.SelectUserInfoByConditions(searchUserInfoVo);
    }

    /**
     * 用户登录
     * @param loginVo 登录参数
     */
    @PostMapping("/login")
    @ApiOperation("用户登录")
    public ResponseResult<LoginDto> Login(@RequestBody LoginVo loginVo) {
        return userInfoService.Login(loginVo);
    }

    /**
     * 用户注册
     * @param loginVo 注册参数
     */
    @PostMapping("/register")
    @ApiOperation("用户注册")
    public ResponseResult<LoginDto> Register(@RequestBody LoginVo loginVo) {
        return userInfoService.Register(loginVo);
    }
}
